![AWS Elemental MediaLiveで映像へのタイムコードの焼き付けをサポートしました!?burn-in?](https://devio2023-media.developers.io/wp-content/uploads/2019/05/aws-elemental-medialive.png)
AWS Elemental MediaLiveで映像へのタイムコードの焼き付けをサポートしました!?burn-in?
はじめに
清水です。ブロードキャストグレードのライブ動画処理サービスであるAWS Elemental MediaLiveで映像へのタイムコードの焼き付けをサポートするアップデートがありました!(2023/01/23付でAWS What's Newにポストされたアップデートとなります。)
AWS Elemental MediaLiveではこれまでもメタデータ、つまり映像自体ではなく視覚的に見えない内部的なデータとしてタイムコードを含めることが可能でした。今回のアップデートでは、このメタデータによるタイムコードに加え、映像自体にタイムコードを表示させる(焼き付ける)ことが可能になったわけです。
一般的なライブ配信のような視聴者へ映像を配信するユースケースで映像自体にタイムコードをのせる必要がある、といったことはまれだと思います。ただこのタイムコードの映像への焼き付け機能、動作確認などの際には非常に役に立つ機能ではないでしょうか。その他、監視やコンプライアンス用のユースケースが上記AWS Whats' Newのポストで紹介されていました。
これまでこのような映像にタイムコードを焼き付ける場合は、MediaLiveへの入力となる映像ソースの段階で処理を行う必要がありました。(MediaLiveのHTML5モーショングラフィックすオーバーレイを使うことで実現できなくもないのかな、とも思いましたが、本来のユースケースではないかと思います。)映像機器側で簡単にタイムコードの焼き付けができればよいのですが、そういった機能がない場合にはタイムコード焼き付け用の専用の機器を準備して、などと手間がかかりました。今後はMediaLive側で設定を行うだけでタイムコードの焼き付けが可能になりますね。
またMediaLiveではOutputごとにタイムコードの焼き付けを設定します。クラウドに打ち上げる映像ソースは1本ののみで、一方のOutputにはタイムコードを焼き付け、もう一方はクリーンな映像として利用する、といったことも容易に可能となります。
本エントリではこのAWS Elemental MediaLiveのタイムコード焼き付け機能について、実際に使用してみたのでまとめてみたいと思います。
MediaLiveで映像にタイムコードを焼き付けてみた
まずはMediaLiveのWorkflow wizardで基本となるリソースを作成し、その各リソースに対してTimecode burn-inの設定を行っていきます。その後、実際にライブストリーミングを行い、映像にタイムコードが焼き付けられているかを確認します。
Workflow wizardで基本となるMediaLiveリソースの作成
MediaLiveのマネジメントコンソール、Workflow wizardのページから[Create workflow]ボタンで進みます。Workflow nameを適切に設定、Channel classは検証用とですのでSINGLE_PIPELINE
としました。
Input typeはRTMP (push)
を選択、Inputリソースは新規に作成します。Destinationの設定やInput Security Groupを適切に選択して[Next]で進みます。
OutputについてはMediaPackage
を選択しました。MediaPackage Channelも新規に作成します。Renditionsとして1080p30
、720p30
、480p30
の3つを選択しました。(後述しますが、1080p30
という表記ですがフレームレートは29.97である点に留意しておきましょう。)
内容をReviewして[Create workflow resources]します。
Workflowの各リソースが作成できました。続いてChannel設定で実際にTimecodeの焼き付けの設定を行います。
MediaLive ChannelでTimecode焼き付けの設定
MediaLiveのChannelsの一覧から先ほどWorkflowで作成したChannelを選択し、Channel ActionsからEdit channelでChannelの設定変更画面に進みます。
Output groupsの項目、「1. mediapackage」のグループ内の「Output 1: emp_1080p30」を選択します。Stream settingsのVideoの設定で、Timecodeの項目を展開して「Timecode Burn-in Settings」の項目でTimecode burnin
を選択します。追加の設定項目が現れますので、それぞれ設定します。ここではPrefixはデフォルトの空欄のまま、Font SizeはLARGE_48
、PositionはBOTTOM_CENTER
を選択しました。
「Output 2: emp_720p30」でも同様の設定を行います。Prefixで720p30
を入力し、Font SizeはMEDIUM_32
にしました。Positionは先と変わらずBOTTOM_CENTER
です。
「Output 3: emp_480p30」は設定せずデフォルトのまま、[Update channel]ボタンで設定変更を反映させます。
タイムコードが焼き付けられていることの確認
OutputへのTimecode Burn-inの設定ができたら、WorkflowをStartさせて映像を打ち上げ、ライブストリーミングに実際にタイムコードが焼き付けられているか確認してみます。
ライブストリーミングの確認ですが、videojs-http-streaming Demoのページで行います。あらかじめ、Workflowで作成したMediaPackage HLS endpointのCloudFront URLを確認しておきます。
videojs-http-streaming Demoのページ、Source URLの欄にMediaPackage HLS endpointのCloudFront URLを入力して[Load]ボタンを押し、Playerの再生ボタンを押しててライブストリーミングが視聴できることを確認します。
さて、上記のスクリーンショットの状態ではタイムコードはのっていませんね。さきほど、1080p30
、720p30
、480p30
のそれぞれのOutputに別々の設定を行ったことを思い出してみましょう。Output 1080p30
にはPrefixなしのタイムコード、Output 720p30
にはPrefix720p30
を付与、そしてOutput 480p30
にはTimecode burnin設定をしない(デフォルトのまま)という状況でしたね。それぞれの解像度ごとに確認をしてみます。
Playerのシークバーの右側、歯車のマークから1080p
を選択します。以降、わかりやすいようにスクリーンショットはフルHD(1920x1080)解像度のディスプレイにフルスクリーン表示したものを掲示します。
以下が1080p
を選択した際のライブストリーミングの視聴画面です。hh:mm:ss;ff
という形式で映像に焼き付いたタイムコードが表示されましたね。なおAWS Elemental MediaLive User Guideに記載がありますが、このタイムコードはタイマーではなくクロックとなるということです。(Burning the timecode into output - AWS Elemental MediaLive)またクロックがUTCである点にも注意しましょう。
続いて720p
を選択してみます。720p30
というプレフィックスとともに720p30 hh:mm:ss;ff
という形式でタイムコードが表示されました。
480p
も選択してみましょう。こちらはTimecode burnin設定をしないデフォルトのままでしたので、タイムコードは表示されませんね。
ノンドロップフレームのタイムコード焼き付けも確認してみる
MediaLiveの設定でタイムコードの焼き付けができることが確認できました。さてタイムコードはhh:mm:ss;ff
という形式でした。便宜上、Outputの表示などにあわせて1080p30
などとフレームレートが30であるように記載してきましたが、厳密にはこのWorkflow wizardで作成したMediaLive Outputのフレームレートは29.97のドロップフレームです。実はWorkflow wizardの途中、MediaPackage destinationの項目で記載がありました。以下、スクリーンショットの再掲です。
MediaLiveのChannelリソースでも確認してみましょう。29.97のフレームレートの設定(Framerate Numeratorが30000、Framerate Denominatorが1001)になっていますね。
29.97のドロップフレームだったため、hh:mm:ss;ff
というフレーム部分(ff
)前のセパレータが;
の表示形式だったわけですが、これをノンドロップフレームにした場合の挙動についても確認しておきましょう。
フレームレートがちょうど30になるよう、Framerate Numeratorを30、Framerate Denominatorを1に設定します。Channelの設定変更の際にはMediaLive Channel(ないしWorkflow)が停止状態である必要がある点に注意しましょう。
また1つのOutput groups内で1つのOutputのみノンドロップフレームにすることはできないようです。Validation Errors「Segment sizes must be the same across all renditions in an MediaPackage output group. Check the configured segment size, GOP length, and frame rate for each rendition.」というエラーで怒られてしまいました。3つのOutputすべてでノンドロップフレームとなるよう設定を行います。
設定後、再度MediaLive ChannelをStartさせてライブストリーミングを確認してみます。ノンドロップフレームのhh:mm:ss:ff
の形式でタイムコードが焼き付けられていますね。
まとめ
AWS Elemental MediaLiveの新機能、タイムコードの映像への焼き付け(Timecode burn-in)について確認してみました。これまでもMediaLiveに打ち上げる前、映像ソース側で処理できていたことではあるかと思いますが、例えばタイムコードの有無で別の入力ソースとして打ち上げていた、なんて場合にはMediaLiveで処理することで映像アップロード帯域の削減につながりますね。また映像ソース側でタイムコードの焼き付け用に専用の機器を準備していた、というケースでは映像機器の簡略化が期待できるかと思います。
個人的には、映像にタイムコードを焼き付けるお手軽なツールが身近になかったので(映像編集ソフトでの焼き付けも考えましたが、そのために編集ソフト準備するのもなぁ、と)、利用頻度は低いけれどあったら助かる機能でした!サポートされて大変嬉しいです!